package br.com.fiap.vendas.ws.service;

import br.com.fiap.vendas.business.delegate.ClienteDelegate;
import br.com.fiap.vendas.business.delegate.PedidoDelegate;
import br.com.fiap.vendas.business.exception.ServiceException;
import br.com.fiap.vendas.business.vo.ClienteVO;
import br.com.fiap.vendas.business.vo.PedidoVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * Created by jeferson on 1/26/14.
 */
public class PedidoWS {

    private PedidoDelegate pedidoDelegate;
    private ClienteDelegate clienteDelegate;

    public PedidoWS() {
        if (pedidoDelegate == null) {
            pedidoDelegate = new PedidoDelegate();
        }
        if (clienteDelegate == null) {
            clienteDelegate = new ClienteDelegate();
        }
    }

    public List<PedidoVO> localizarPedidosReservados() {
        return pedidoDelegate.buscarPedidosReservados();
    }

    public List<PedidoVO> localizarPedidosPorValor(final BigDecimal valor) {
        return pedidoDelegate.buscarPedidosPorValor(valor);
    }

    public Integer criarPedidoAssincrono(PedidoVO pedidoVO) {
        try {

            if (pedidoVO.getCliente() == null || pedidoVO.getCliente().getId() == null || pedidoVO.getProduto() == null || pedidoVO.getProduto().getId() == null || pedidoVO.getQuantidade() == null) {
                throw new IllegalArgumentException("id do cliente, id do produto e quantidade do pedido sao obrigatorios.");
            }
            return pedidoDelegate.inserirPedidoAssincrono(pedidoVO);
        } catch (ServiceException e) {
            return null;
        }

    }

    public PedidoVO localizarPedido(Integer idProduto) {
        return pedidoDelegate.localizarPedido(idProduto);
    }

    public List<ClienteVO> localizarClientesComPedidos() {
        try {
            return clienteDelegate.buscarClientesComPedidos();
        } catch (ServiceException e) {
            return null;
        }
    }


}
